[Docker] Linux 主機之 Docker 安裝和 ReverseProxy 建置

6 分鐘閱讀 View counter badge

前言

圖源

此篇文章由零開始設定 Linux 主機、安裝 Docker,並設定 Reverse Proxy

Reverse Proxy (反向代理),可以比喻為一棟樓的大門管理員
當一個包裏送至管理員,管理員會依照地址將之轉送給後方的住戶
當一個 Web Request 送至 Reverse Proxy,Reverse Proxy 會依照 URL 將之轉送給後方的伺服器
使用 docker 技術,能在同一台機器上配置多個伺服器,且不會互相干擾

此套 ReverseProxy 可在 docker compose up 時建立路由,自動申請及 Renew SSL 證書
我個人的所有網路服務都是配合此套 ReverseProxy 做建置,特撰此文以做前導

流程簡述

  1. 起一台新的 Linux
  2. 安裝 docker、docker-compose
  3. git clone 下 Reverse Proxy 之建置檔案
  4. docker-compose up -d

建置

Linux 主機

如果你使用 22.10 版本以上的 Ubuntu,改用這個方式更改 SSH port


https://askubuntu.com/a/1439482

小小建議


可以開一個 3GB 的 Volume 做 Swap,比加 RAM 便宜得多喔
建立 Volume 的說明,還有 Swap 的說明

Docker 安裝

可參閱官方文件
若有更新,請以官方文件為準

Reverse Proxy 建置

請用 root 連入或是 su
docker 所有操作都需要 root 權限,且 docker-compose file 我會建議放在 root 家目錄下

Reverse Proxy 之使用

對每個後端服務 添加以下環境變數

環境變數說明
VIRTUAL_HOST要導向此 container 的網址
LETSENCRYPT_HOSTSSL 證書之網域、別名
LETSENCRYPT_EMAILSSL 證書申請人 email,到期日近會有通知。請正確填寫,似乎不能變更
LETSENCRYPT_TEST申請測試證書。請給 true/false。因正式申請有嘗試次數上限、申請數量上限,請在最後上線前再轉 false

然後將所有後端服務都連上 networks: proxy-tier,就像這樣

就這麼簡單 (╹ڡ╹)

附註: docker-compose vs docker compose

2024/10/13 更新
目前 v2 已經穩定,請一律使用 v2

Windows Docker Desktop 新舊都有內建,可在設定中開啟 v2
v2 不像 v1 是獨立程式,而是 docker-cli plugin

其餘差異見官方文件。

Compose command compatibility with docker-compose | Docker Documentation

compose-switch: 以 docker-compose 執行 docker compose

網路上舊的 command 都是 docker-compose,因為 command 不同,沒辦法 copy & paste 直接用,造成不少困擾。官方做了 compose-switch 工具來解決這個問題。它可以在下 command 執行 docker-compose 時改叫 docker compose 來用。

需注意,compose-switch 是「以 docker-compose 來呼叫 v2」,而不是執行 v1,v2 和 v1 有若干不同

curl -fL https://raw.githubusercontent.com/docker/compose-switch/master/install_on_linux.sh | sh
update-alternatives --install /usr/local/bin/docker-compose docker-compose /usr/local/bin/compose-switch 99

測試

docker-compose version

安裝成功將會印出版本號

附註: 常用 docker 指令

# 列出所有 container,-a: 列出包含未啟動的 container
docker ps -a

# 列出所有 volume
docker volume ls

# 清除所有未被 container 使用的 volume
docker volume prune

# 建立 compose,同時用來做驗證
docker-compose build

# compose 狀態,可以用來檢查變數是否有正確代入,環境變數的讀入順序十分麻煩
docker-compose config

# 啟動 compose,-d: 以 daemon 背景服務執行
docker-compose up -d

# compose 操作都可以用 - f 給定 docker-compose.yml 的位置,但需注意有些相對路徑可能會有問題
docker-compose -f <路徑> up -d

# stop & remove compose 的所有 container,-v: 同時刪除 volume
docker-compose down

# 列出此 compose 的 logs,-f: 持續監聽
docker-compose logs

# 列出指定 container 的 log,-f: 持續監聽 docker logs
docker logs <container name>

# 重啟 compose 下的 container

docker-compose restart

# 在 container 內執行指令,常會執行 bash 來做進入  
docker exec -it <指令>

回覆

你可以使用 Mastodon 或其他 ActivityPub/Fediverse 帳號來公開回覆此文章。現有的公開回覆顯示在下方。

打開文章